package com.wlf.demo.mp.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wlf.demo.mp.entity.User;
import com.wlf.demo.mp.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.*;

/**
 * <p>
 * 用户信息表 前端控制器
 * </p>
 *
 * @author 无良芳
 * @since 2020-06-05
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private IUserService iUserService;

    /**
     * 根据用户id获取用户信息
     * @param id 用户id
     * @return User 用户实体
     */
    @GetMapping("/getUser")
    public User getUser(@RequestParam("id") Integer id){
        return iUserService.getById(id);
    }

    /**
     * 查询全部信息
     * @return 返回用户实体类集合
     */
    @GetMapping("/getList")
    public List<User> getList(){
        return iUserService.list();
    }

    /**
     * 分页查询全部数据
     * 这里只做演示，不写前端
     * @return IPage<User> 分页数据
     */
    @GetMapping("/getUserListPage")
    public IPage<User> getUserListPage(){
        IPage<User> page = new Page<>();
        //当前页
        page.setCurrent(4);
        //每页条数
        page.setSize(2);
        return iUserService.page(page);
    }

    /**
     * 根据指定字段查询用户信息集合
     * @Return Collection<User> 用户实体集合
     */
    @GetMapping("/getListMap")
    public Collection<User> getListMap(){
        Map<String,Object> map = new HashMap<>();
        //kay是字段名 value是字段值
        map.put("age",20);
        return iUserService.listByMap(map);
    }
    /**
     * 新增用户信息
     */
    @GetMapping("/saveUser")
    public void saveUser(){
        User userInfoEntity = new User();
        userInfoEntity.setName("陈墨瞳");
        userInfoEntity.setSkill("侧写");
        userInfoEntity.setAge(18);
        userInfoEntity.setFraction(99L);
        userInfoEntity.setEvaluate("无言灵，长得漂亮");
        iUserService.save(userInfoEntity);
    }
    /**
     * 批量新增用户信息
     */
    @RequestMapping("/saveUserList")
    public void saveUserList(){
        //创建对象
        User sans = new User();
        sans.setName("芬格尔");
        sans.setSkill("睡觉");
        sans.setAge(18);
        sans.setFraction(60L);
        sans.setEvaluate("芬格尔是一个爱睡觉,并且身手十分了的");
        User papyrus = new User();
        papyrus.setName("零");
        papyrus.setSkill("镜瞳");
        papyrus.setAge(18);
        papyrus.setFraction(99L);
        papyrus.setEvaluate("高冷女王");
        //批量保存
        List<User> list =new ArrayList<>();
        list.add(sans);
        list.add(papyrus);
        iUserService.saveBatch(list);
    }
    /**
     * 更新用户信息
     */
    @RequestMapping("/updateUser")
    public void updateUser(){
        //根据实体中的ID去更新,其他字段如果值为null则不会更新该字段,参考yml配置文件
        User userInfoEntity = new User();
        userInfoEntity.setId(1L);
        userInfoEntity.setAge(19);
        iUserService.updateById(userInfoEntity);
    }
    /**
     * 新增或者更新用户信息
     */
    @RequestMapping("/saveOrUpdateUser")
    public void saveOrUpdate(){
        //传入的实体类userInfoEntity中ID为null就会新增(ID自增)
        //实体类ID值存在,如果数据库存在ID就会更新,如果不存在就会新增
        User userInfoEntity = new User();
        userInfoEntity.setId(1L);
        userInfoEntity.setAge(20);
        iUserService.saveOrUpdate(userInfoEntity);
    }
    /**
     * 根据ID删除用户信息
     */
    @RequestMapping("/deleteUser")
    public void deleteInfo(String id){
        iUserService.removeById(id);
    }
    /**
     * 根据ID批量删除用户信息
     */
    @RequestMapping("/deleteUserList")
    public void deleteInfoList(){
        List<String> userIdlist = new ArrayList<>();
        userIdlist.add("12");
        userIdlist.add("13");
        iUserService.removeByIds(userIdlist);
    }
    /**
     * 根据指定字段删除用户信息
     */
    @RequestMapping("/deleteUserMap")
    public void deleteInfoMap(){
        //kay是字段名 value是字段值
        Map<String,Object> map = new HashMap<>();
        map.put("skill","删除");
        map.put("fraction",10L);
        iUserService.removeByMap(map);
    }
    
}
